模版激励视频广告
简介
激励视频广告是一种全新的广告形式,用户可选择观看视频广告以换取有价物,例如虚拟货币、应用内物品和独家内容等等;这类广告一般有一定长度,部分可支持跳过(具体支持视不同ADN而定)。
注意事项
①需要确保在SDK初始化成功后再进行广告请求,否则可能导致广告请求加载失败。 ②聚合维度广告是通过广告位ID发起广告请求的,切记不要使用混淆; ③在广告接入前需要明确各ADN对应聚合广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生。 ④由于各广告平台对于包名校验规则不同,需确保在穿山甲媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生。 ⑤为了保证播放流畅,使用聚合功能的开发者在收到nativeExpressRewardedVideoAdDidLoad:回调来展示广告,在展示前可通过isReady字段来判断当前广告是否可用。 ⑥当广告无法展示时,建议在展示失败nativeExpressRewardedVideoAdDidShowFailed:回调内输出对应的error错误码明确展示失败的原因,可优先检查是否调整了系统时间导致触发此场景。 ⑦如若针对展示失败有重试机制,建议只重试一次即可,避免无限重试引发死循环场景。 ⑧当展示失败/回调监听不执行时,建议检查是否有广告对象被覆盖或者被提前释放的场景导致,每次发次广告请求时,需要重新创建新的广告来调用广告请求方法。 ⑨视频是否静音由接口mutedIfCan控制,默认为NO,对GDT、Mintergral、KS生效。
接入激励视频广告
// 创建广告对象
- (void)p_buildAd {
CloooudAdSlot *adslot = [[CloooudAdSlot alloc]init];
adslot.ID = "广告位ID"; // 聚合维度通过广告位ID发起请求
// 聚合维度相关设置
adslot.mediation.mutedIfCan = NO; // 是否静音
adslot.mediation.bidNotify = NO; // 是否开启竞价结果回传
adslot.mediation.scenarioID = @"123321"; // 场景ID
CloooudRewardedVideoModel *model = [[CloooudRewardedVideoModel alloc] init];
model.userId = @"123"; // 用户唯一标识
model.rewardName = @"rewardName"; // 奖励名称
model.rewardAmount = 100; // 奖励数量
model.extra = @{@"key1" : @"value1"}.CloooudYY_modelToJSONString; // 透传参数
self.rewardedVideoAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlot:adslot rewardedVideoModel:model];
self.rewardedVideoAd.delegate = self;
// optional
self.rewardedVideoAd.rewardPlayAgainInteractionDelegate = self.rewardedVideoAgainDelegateObj;
}
// 触发广告加载
- (void)p_loadAdData {
[self.rewardedVideoAd loadAdData];
}
// 收到load成功回调后展示
#pragma mark - CloooudRewardedVideoAdDelegate
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
[self.rewardedVideoAd showAdFromRootViewController:self];
}
获取展示后广告信息示例
在收到展示回调Visible后访问可获取到正确信息(聚合维度功能)
- (void)logAdInfoAfterShow {
CloooudMRitInfo *info = [self.rewardedVideoAd.mediation getShowEcpmInfo];
// 展示后可获取信息如下
NSLog(@"ecpm:%@", info.ecpm); // 单位:分
NSLog(@"platform:%@", info.adnName);
NSLog(@"ritID:%@", info.slotID);
NSLog(@"requestID:%@", info.requestID ?: @"None");
NSLog(@"getAdLoadInfoList:%@", [self.rewardedVideoAd.mediation getAdLoadInfoList]);
}
接口及回调说明
CloooudNativeExpressRewardedVideoAd说明
方法 | 说明 |
---|---|
@property (nonatomic, weak, nullable) id |
激励视频协议,聚合维度使用CloooudMNativeExpressRewardedVideoAdDelegate |
@property (nonatomic, weak, nullable) id |
为rewardPlayAgainInteractionDelegate增加聚合维度相关回调 |
@property (nonatomic, copy, readonly) CloooudDictionary *mediaExt; | 媒体配置参数 |
@property (nonatomic, assign, readonly) BOOL materialMetaIsFromPreload; | 默认是否 此字段的值在下载成功后才准确 聚合维度不支持此接口 |
@property (nonatomic, assign, readonly) NSTimeInterval expireTimestamp; | 过期时间戳 纯试玩,此字段的值在下载成功后才准确 聚合维度不支持此接口。 |
- (instancetype)initWithSlotID:(NSString )slotID rewardedVideoModel:(CloooudRewardedVideoModel )model; | 创建广告对象参数 |
- (instancetype)initWithSlot:(CloooudAdSlot )slot rewardedVideoModel:(CloooudRewardedVideoModel )model; | 创建广告slot参数 |
- (NSString *)getAdCreativeToken; | 物料ID 聚合维度不支持 |
- (void)loadAdData; | 加载广告 |
- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; | 广告展示回调 |
- (BOOL)showAdFromRootViewController:(UIViewController )rootViewController ritScene:(CloooudRitSceneType)ritSceneType ritSceneDescribe:(NSString _Nullable)sceneDescirbe; | |
- (NSTimeInterval)getExpireTimestamp; | 过期时间戳 此字段只有下载视频成功或获取权限后才准确 聚合维度不支持此接口 |
@property (nonatomic, strong, nullable, readonly) CloooudExpressRewardedVideoAdMediation *mediation; | 当使用聚合广告位时,存在该属性,可获取聚合维 |
CloooudExpressRewardedVideoAdMediationProtocol说明
方法 | 说明 |
---|---|
@property (nonatomic, assign, readonly) BOOL isReady; | 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示 |
- (CloooudMRitInfo *)getShowEcpmInfo; | 返回显示广告对应的披露信息 |
- (CloooudMRitInfo *)getCurrentBestEcpmInfo; | 填充后可调用,返回当前最佳广告的ecpm;当为server bidding ad时访问需要白名单权限;nil为无权限; |
- (NSArray<CloooudMRitInfo > )multiBiddingEcpmInfos; | 填充后可调用,但推荐展示后调用,返回竞价广告的ecpm;当为server bidding ad时访问需要白名单权限; |
- (NSArray<CloooudMRitInfo > )cacheRitList; | 填充后可调用, 返回广告缓存池内所有信息;nil为无权限; |
@property (nonatomic, assign, readonly) BOOL isLoading; | 广告是否加载中 |
- (void)addParam:(id)param withKey:(NSString *)key; | 添加参数 param 参数值 key 参数key |
- (NSArray<CloooudMAdLoadInfo > )getAdLoadInfoList; | 一次waterfall中各adn代码位加载广告失败原因,建议调用时机:展示广告时/超时时/全部返回报错时;返回nil表示一次加载无代码位加载失败或其加载无响应 |
CloooudNativeExpressRewardedVideoAdDelegate说明
方法 | 说明 |
---|---|
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 物料加载成功回调 |
- (void)nativeExpressRewardedVideoAd:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd didFailWithError:(NSError _Nullable)error; | 加载失败回调 |
- (void)nativeExpressRewardedVideoAdCallback:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd withType:(CloooudNativeExpressRewardedVideoAdType)nativeExpressVideoType; | 聚合维度不支持此场景 |
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 当缓存成功时调用此方法。为了更好的用户体验,建议在这个时候显示视频广告。调用[CloooudNativeExpressRewardedVideoAd] showAdFromRootViewController:] |
- (void)nativeExpressRewardedVideoAdViewRenderSuccess:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 渲染成功回调 |
- (void)nativeExpressRewardedVideoAdViewRenderFail:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd error:(NSError _Nullable)error; | 渲染失败回调 |
- (void)nativeExpressRewardedVideoAdWillVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告即将展示 |
- (void)nativeExpressRewardedVideoAdDidVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告已经展示 |
- (void)nativeExpressRewardedVideoAdWillClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告即将关闭 |
- (void)nativeExpressRewardedVideoAdDidClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告已经关闭 |
- (void)nativeExpressRewardedVideoAdDidClick:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告点击回调 |
- (void)nativeExpressRewardedVideoAdDidClickSkip:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; | 广告跳过回调 |
- (void)nativeExpressRewardedVideoAdDidPlayFinish:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd didFailWithError:(NSError _Nullable)error; | 广告播放完成回调 |
- (void)nativeExpressRewardedVideoAdServerRewardDidSucceed:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify; | 奖励验证回调 |
- (void)nativeExpressRewardedVideoAdServerRewardDidFail:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd error:(NSError _Nullable)error; | 奖励验证失败回调 error:失败原因 |
- (void)nativeExpressRewardedVideoAdDidCloseOtherController:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd interactionType:(CloooudInteractionType)interactionType; | 此方法在另一个控制器关闭时调用。interactionType:在app中打开appstore或打开网页或查看视频广告详情页面 聚合维度不支持此场景。 |
高级功能
显示奖励内容
- 激励广告增加「在广告中显示奖励内容」功能,根据开发者配置的奖励物品和数量,在激励视频广告播放过程中提示用户完成激励任务后将获取的奖励收益,以激发用户兴趣、观看更久更完整的视频广告,提升整体的CTR和收入。
- 当前已支持在挽留弹窗中显示奖励内容,还在持续创新更多的展示样式。
使用说明
-
若想使用此功能,必须在平台-激励视频代码位创编中配置开启“是否在广告中显示奖励内容”开关。
-
开启后,根据系统优选的结果,您设置的奖励物品名称、奖励数量将有可能在广告播放过程中展示。开发者可以通过两种方案配置具体显示的奖励内容。
- 在平台的代码位创编页面中里输入奖励名称和数量。
- 在请求广告时传入奖励名称和数量。
-
在实际使用时,会按照优先级 2 > 1 来展示,若奖励名称和数量任一为空,则认为此对值无效。
- 奖励数量为1~5个数字整数值,奖励内容为1~10个英文字符长度的字符串。
-
具体的使用示例与温馨提示
- 奖励物品名称“金币”,奖励数量“500”,广告挽留弹窗提示用户继续看完视频可领取“500金币”;奖励物品名称“分钟免广告”,奖励数量“60”,挽留弹窗显示继续观看xxs可领取奖励“60分钟免广告”。
- 建议开发者配置/回传用户可真实获取的奖励内容,避免用户对奖励预期与获取产生出入。
- 推荐开发者通过接口回传的形式,以便更灵活、动态地下发奖励,在用户粒度个性化优化收益。
接口说明
在构建CloooudNativeExpressRewardedVideoAd时,使用CloooudRewardedVideoModel,传入奖励名称与奖励数量。
CloooudRewardedVideoModel *model = [[CloooudRewardedVideoModel alloc] init];
model.rewardName = @"金币"; // 奖励名称
model.rewardAmount = 300; // 奖励数量
self.rewardedAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlotID:slotID rewardedVideoModel:model];
聚合维度“再看一个”功能介绍
简介
- 支持激励视频“再看一个”能力(简称激励再得),开启该功能后聚合维度会自动缓存一条激励视频广告,并在首次广告展示后且收到奖励回调后,渲染挽留弹窗引导用户“再看一个获取更多奖励”,用户点击后将自动播放缓存广告,有利于提升用户的广告价值和活跃时长。
挽留弹窗样式示例
完整接入示例代码
/******** 激励广告配置 *********/
- (void)loadAd {
CloooudAdSlot *slot = [[CloooudAdSlot alloc] init];
slot.ID = @"广告位ID"; // 聚合维度使用广告位ID发起请求,
slot.mediation.mutedIfCan = YES; // 静音(聚合维度设置)
// 奖励发放设置
CloooudRewardedVideoModel *rewardedVideoModel = [[CloooudRewardedVideoModel alloc] init];
rewardedVideoModel.rewardName = @"金币"; // 奖励名称
rewardedVideoModel.rewardAmount = 1000; // 奖励数量
rewardedVideoModel.extra = ({
// 透传参数
NSDictionary *extra = @{
@"value": @"10",
};
NSData *data = [NSJSONSerialization dataWithJSONObject:extra options:NSJSONWritingSortedKeys error:NULL];
NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
json;
});
CloooudNativeExpressRewardedVideoAd *rewardedVideoAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlot:slot rewardedVideoModel:rewardedVideoModel];
rewardedVideoAd.delegate = self;
// 设置竖屏 (聚合维度功能)
[rewardedVideoAd.mediation addParam:@(0) withKey:@"show_direction"];
self.rewardedVideoAd = rewardedVideoAd;
[self.rewardedVideoAd loadAdData];
}
/******** 激励广告回调处理 *********/
#pragma mark - CloooudMNativeExpressRewardedVideoAdDelegate
// 广告加载成功
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
// 聚合维度 广告加载成功之后,可以调用展示方法,按照实际需要调整代码位置
[rewardedVideoAd showAdFromRootViewController:self];
}
// 广告加载失败
- (void)nativeExpressRewardedVideoAd:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
}
// 广告素材加载完成
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
// 仅接入CSJ广告建议在收到该回调时展示广告
}
// 广告展示失败
- (void)nativeExpressRewardedVideoAdDidShowFailed:(CloooudNativeExpressRewardedVideoAd *_Nonnull)rewardedVideoAd error:(NSError *_Nonnull)error {
}
// 广告已经展示
- (void)nativeExpressRewardedVideoAdDidVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
/*
// (注意: getShowEcpmInfo 需要在当前广告展示之后调用, 展示之前调用该方法会返回 nil)
CloooudMRitInfo *info = [rewardedVideoAd.mediation getShowEcpmInfo];
NSLog(@"ecpm:%@", info.ecpm);
NSLog(@"platform:%@", info.adnName);
NSLog(@"ritID:%@", info.slotID);
NSLog(@"requestID:%@", info.requestID ?: @"None");
*/
}
// 广告已经关闭
- (void)nativeExpressRewardedVideoAdDidClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
}
// 广告被点击
- (void)nativeExpressRewardedVideoAdDidClick:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
}
// 广告被点击跳过
- (void)nativeExpressRewardedVideoAdDidClickSkip:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
}
// 广告视频播放完成
- (void)nativeExpressRewardedVideoAdDidPlayFinish:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
}
// 广告奖励下发
- (void)nativeExpressRewardedVideoAdServerRewardDidSucceed:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify {
}
// 广告奖励下发失败
- (void)nativeExpressRewardedVideoAdServerRewardDidFail:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd error:(NSError *_Nullable)error {
}
详细接入可参照demo中的CloooudMDExpressRewardedVideoViewController类。